import { 
    queryShopCart, 
    addGoodsToShopCart,
    updateCartCount,
    removeGoodsFromCart
 } from '@/api/cart'
export const useCartStore = defineStore('cart', () => {
    //购物车条目的数组
    const cartItems = ref([])
    //调用接口获取购物车列表以初始化cartItems
    async function getCartList(){
        cartItems.value = await queryShopCart();
    }
    //向购物车添加一个新的商品
    async function addCartList(goodsId,goodsCount=1){
        //调用接口向后台添加购物车商品
        await addGoodsToShopCart(goodsId,goodsCount);
        //添完以后为了保证仓库里的条目和后台数据一致，可以再调一次接口获取最新的列表
        getCartList();
    }
    async function updateCartList(cartItemId,goodsCount){
        await updateCartCount(cartItemId,goodsCount);
        cartItems.value.map(cartItem=>{
            if(cartItem.cartItemId === cartItemId){
                cartItem.goodsCount=goodsCount;
            }
            return cartItem;
        });
    }
    async function removeCartList(cartItemId){
        await removeGoodsFromCart(cartItemId);
        cartItems.value=cartItems.value.filter(cartItem=>cartItem.cartItemId !== cartItemId);
    }
    getCartList();
    //计算属性，计算商品的总数量
    const totalAmount = computed(()=>{
        return cartItems.value.reduce((acc,cartItem)=>{
            return acc+cartItem.goodsCount;
        },0);
    });
    //计算总金额
    const totalPrice = computed(()=>{
        return cartItems.value.reduce((acc,cartItem)=>{
            if(cartItem.checked)
                return acc+cartItem.goodsCount*cartItem.sellingPrice;
            else
                return acc;
        },0)*100;
    });
    const isAllChecked = computed({
        get(){
            //如果购物车里的每一个条目都选中的，则返回true,只要有一个没选中就是false
            return cartItems.value.every(cartItem=>cartItem.checked);
        },
        set(newValue){
            cartItems.value.forEach(cartItem=>cartItem.checked = newValue);
        }
    });
    return {
        cartItems,
        getCartList,
        addCartList,
        updateCartList,
        removeCartList,
        totalAmount,
        totalPrice,
        isAllChecked
    }
});